<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>
C语言基础知识(一)
</title>

    


  
  <meta name="author" content="zhitaoZ" />
  <meta name="description" content="No one is a island" />



<meta name="generator" content="Hugo 0.65.3" />

<link rel="canonical" href="https://zhitaoz.github.io/post/learnc1/" />


<meta property="og:title" content="C语言基础知识(一)" />
<meta property="og:description" content="C语言基础知识 (一)" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://zhitaoz.github.io/post/learnc1/" />
<meta property="article:published_time" content="2020-03-06T21:13:45+08:00" />
<meta property="article:modified_time" content="2020-03-08T10:30:45+08:00" />



<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="C语言基础知识(一)"/>
<meta name="twitter:description" content="C语言基础知识 (一)"/>


<link rel="stylesheet" href="/css/github-markdown.css" />
<link rel="stylesheet" href="/css/semantic.min.css" />
<link rel="stylesheet" href="/css/site.css" />


<style>
  a {
    color: seagreen !important;
  }
</style>



<style>
  .inverted a {
     color: darkseagreen !important;
  }
</style>


  </head>

  
  <body style="background-image: url(/me/background.jpg);">
  
    <div class="flip-container">
      <div class="flipper">
        <section class="front">
          
<nav class="ui secondary inverted menu dream-menu">

  <div class="item">
    <i class="large link bullseye icon dream-flip-toggle" title="Flip it!"></i>
  </div>
  <div class="item">
    <i class="large link home icon" title="Home" onclick="window.location.href = 'https:\/\/zhitaoz.github.io\/'"></i>
  </div>
  <div class="item">
    <i id="theme-switch" class="large link icon" onclick="themeSwitch()"></i>
  </div>
</nav>

          
<div class="ui centered relaxed grid dream-grid">
  <div class="sixteen wide mobile sixteen wide tablet twelve wide computer column markdown-body dream-single">

    <section class="ui top attached segment" id="dream-save-post-as-img">
      <header style="margin-top: 0 !important;">
        <h2 class="ui header">
          C语言基础知识(一)
          <div class="sub header">@ zhitaoZ · Friday, Mar 6, 2020 · 4 minute read · Update at Mar 8, 2020</div>
        </h2>
      </header>
      <article style="margin-top: 2rem;"><p>C语言基础知识 (一)</p>
<h2 id="一搭建自己的c语言环境">一、搭建自己的C语言环境</h2>
<p>设置C语言环境，电脑上需要有文本编译器和C编译器，当然也可以用Visual Studio等进行开发。我的选择是在Windows系统中安装GCC。</p>
<ol>
<li>在<a href="www.mingw.org">MinGW</a>的主页下载MinGW的安装程序<em>mingw-get-setup.exe</em>，名称可能因为版本会不尽相同。</li>
<li>运行安装程序，一路默认直到选择安装包<em>mingw-gcc-g++-bin</em>,选择后点击应用，完成安装。</li>
<li>将默认下的安装路径<em>C:\MinGW\bin</em>加入到环境的PATH中。</li>
<li>打开命令行输入<em>gcc -v</em>测试安装是否成功。</li>
</ol>
<h2 id="二hello-world走起">二、Hello World走起</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c"><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdio.h&gt;</span><span style="color:#75715e">
</span><span style="color:#75715e"></span>
<span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>()
{
    <span style="color:#75715e">/*我是一行注释*/</span>
    printf(<span style="color:#e6db74">&#34;Hello World!</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);

    <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>;
}
</code></pre></div><p>代码介绍：</p>
<ol>
<li>第一行*#include *&lt;stdio.h&gt;*是预处理指令，告知C编译器在实际编译之前要包含stdio.h文件。</li>
<li>*int main()*是主函数，程序从这里开始执行。</li>
<li>/*···*/中的内容是代码的注释，会被编译器忽略。</li>
<li>*printf(···)*是C语言的一个函数，可以在屏幕上显示括号里的内容。</li>
<li><em>return 0</em>中止主函数，并返回数字0。</li>
</ol>
<p>编译、执行过程</p>
<ol>
<li>复制上面内容到文本编辑器，保存文件为hi.c</li>
<li>在当前目录打开命令行提示符，输入<em>gcc hi.c</em></li>
<li>代码无措的情况下，当前目录自动生成<em>a.exe</em>文件，命令行跳到下一行。</li>
<li>键入./a.exe后，屏幕显示<em>Hello World!</em></li>
</ol>
<h2 id="三c语言基本语法">三、C语言基本语法</h2>
<h3 id="c的令牌tokens">C的令牌（Tokens）</h3>
<p>C程序由各种令牌组成，包括关键字、标识符、常量、字符串值，或者一个符号。</p>
<h3 id="分号">分号</h3>
<p>C程序中，分号是结束符。每个语句以分号结束，表明一个逻辑实体的结束。</p>
<h3 id="注释">注释</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c"><span style="color:#75715e">// 单行注释
</span><span style="color:#75715e"></span><span style="color:#75715e">/*单行注释*/</span>
<span style="color:#75715e">/*
</span><span style="color:#75715e">  多行注释
</span><span style="color:#75715e">  多行注释
</span><span style="color:#75715e">  多行注释
</span><span style="color:#75715e">*/</span>  
</code></pre></div><p>注意：注释不能嵌套，也不能出现在字符串或字符值中。</p>
<h3 id="标识符">标识符</h3>
<p>C 标识符是用来标识变量、函数，或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始，后跟零个或多个字母、下划线和数字（0-9）。</p>
<p>C 标识符内不允许出现标点字符，比如 @、$ 和 %。C 是区分大小写的编程语言。因此，在 C 中，<em>ZHITAOZ</em> 和 <em>zhitaoz</em> 是两个不同的标识符。</p>
<h3 id="空格">空格</h3>
<p>在 C 中，空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分，让编译器能识别语句中的某个元素（比如 int）在哪里结束，下一个元素在哪里开始。因此，在下面的语句中：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c"><span style="color:#66d9ef">int</span> date;
date <span style="color:#f92672">=</span> year <span style="color:#f92672">+</span> month
</code></pre></div><p>第一句int和date中间必须有空格,而第二句标点符号两边的空格仅仅是为了好看。</p>
<h3 id="关键字">关键字</h3>
<table>
<thead>
<tr>
<th>关键字</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>auto</td>
<td>声明自动变量</td>
</tr>
<tr>
<td>break</td>
<td>跳出当前循环</td>
</tr>
<tr>
<td>case</td>
<td>开关语句分支</td>
</tr>
<tr>
<td>char</td>
<td>声明字符型变量或函数返回值类型</td>
</tr>
<tr>
<td>const</td>
<td>定义常量</td>
</tr>
<tr>
<td>continue</td>
<td>结束当前循环，开始下一轮循环</td>
</tr>
<tr>
<td>default</td>
<td>开关语句的‘其他’分支</td>
</tr>
<tr>
<td>do</td>
<td>循环语句的循环体</td>
</tr>
<tr>
<td>double</td>
<td>声明双精度浮点型变量或函数返回值类型</td>
</tr>
<tr>
<td>else</td>
<td>条件语句否定分支（与if连用）</td>
</tr>
<tr>
<td>enum</td>
<td>声明枚举类型</td>
</tr>
<tr>
<td>extern</td>
<td>声明变量或函数是在其他文件或本文件的其他位置定义</td>
</tr>
<tr>
<td>float</td>
<td>声明浮点变量或函数返回值类型</td>
</tr>
<tr>
<td>for</td>
<td>循环语句</td>
</tr>
<tr>
<td>goto</td>
<td>无条件跳转语句</td>
</tr>
<tr>
<td>if</td>
<td>条件语句</td>
</tr>
<tr>
<td>int</td>
<td>声明整型变量或函数</td>
</tr>
<tr>
<td>long</td>
<td>声明长整型变量或函数返回值类型</td>
</tr>
<tr>
<td>register</td>
<td>声明寄存器变量</td>
</tr>
<tr>
<td>return</td>
<td>子程序返回语句（可带参数，也可不带）</td>
</tr>
<tr>
<td>short</td>
<td>声明短整型变量或函数</td>
</tr>
<tr>
<td>signed</td>
<td>声明有符号类型变量或函数</td>
</tr>
<tr>
<td>sizeof</td>
<td>计算数据类型或变量长度（即所占字节数）</td>
</tr>
<tr>
<td>static</td>
<td>声明静态变量</td>
</tr>
<tr>
<td>struct</td>
<td>声明结构体类型</td>
</tr>
<tr>
<td>switch</td>
<td>用于开光语句</td>
</tr>
<tr>
<td>typedef</td>
<td>用以给数据类型取别名</td>
</tr>
<tr>
<td>unsigned</td>
<td>声明无符号类型变量或函数</td>
</tr>
<tr>
<td>union</td>
<td>声明共用体类型</td>
</tr>
<tr>
<td>void</td>
<td>声明无符号类型变量或函数</td>
</tr>
<tr>
<td>volatile</td>
<td>说明变量在程序执行中可被隐含地改变</td>
</tr>
<tr>
<td>while</td>
<td>循环语句的循环条件</td>
</tr>
</tbody>
</table>
<h4 id="c99新增关键字">C99新增关键字</h4>
<table>
<thead>
<tr>
<th>_Bool</th>
<th>_Complex</th>
<th>_Imaginary</th>
<th>inline</th>
<th>restrict</th>
</tr>
</thead>
</table>
<h4 id="c11新增关键字">C11新增关键字</h4>
<table>
<thead>
<tr>
<th>_Alignas</th>
<th>_Alignof</th>
<th>_Atomic</th>
<th>_Generic</th>
<th>_Noreturn</th>
<th>_Static_assert</th>
<th>_Thread_local</th>
<th></th>
</tr>
</thead>
</table>
<h2 id="四c数据类型">四、C数据类型</h2>
<p>数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统，变量的类型决定了变量存储占用的空间，以及如何解释存储的位模式。</p>
<table>
<thead>
<tr>
<th>数据类型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>基本类型</td>
<td>属于算数类型、包括整型和浮点型</td>
</tr>
<tr>
<td>枚举类型</td>
<td>属于算数类型，被用来定义在程序中能赋予其一定的离散整数值的变量</td>
</tr>
<tr>
<td>void类型</td>
<td>类型说明符void表明没有可用的值</td>
</tr>
<tr>
<td>派生类型</td>
<td>包括指针类型、数据类型、结构类型、共用体类型和函数类型</td>
</tr>
</tbody>
</table>
<p>数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。</p>
<h3 id="整数类型">整数类型</h3>
<table>
<thead>
<tr>
<th>类型</th>
<th>字节数</th>
<th>取值范围</th>
</tr>
</thead>
<tbody>
<tr>
<td>char</td>
<td>1</td>
<td>[-128,127]或[0,255]</td>
</tr>
<tr>
<td>unsigned char</td>
<td>1</td>
<td>[0,255]</td>
</tr>
<tr>
<td>signed char</td>
<td>1</td>
<td>[-128,127]</td>
</tr>
<tr>
<td>int</td>
<td>2或4</td>
<td>[-32768,32767]或[0,4294967295]</td>
</tr>
<tr>
<td>unsigned int</td>
<td>2或4</td>
<td>[0,65535]或[0,4294967295]</td>
</tr>
<tr>
<td>short</td>
<td>2</td>
<td>[-32768,3277]</td>
</tr>
<tr>
<td>unsigned short</td>
<td>2</td>
<td>[0,65535]</td>
</tr>
<tr>
<td>long</td>
<td>4</td>
<td>[-2147483648,2147483647]</td>
</tr>
<tr>
<td>unsinged long</td>
<td>4</td>
<td>[0,4294967295]</td>
</tr>
</tbody>
</table>
<h3 id="浮点类型">浮点类型</h3>
<table>
<thead>
<tr>
<th>类型</th>
<th>字节数</th>
<th>精度</th>
</tr>
</thead>
<tbody>
<tr>
<td>float</td>
<td>4</td>
<td>6位小数</td>
</tr>
<tr>
<td>double</td>
<td>8</td>
<td>15位小数</td>
</tr>
<tr>
<td>long double</td>
<td>16</td>
<td>19位小数</td>
</tr>
</tbody>
</table>
<h3 id="void类型">void类型</h3>
<table>
<thead>
<tr>
<th>使用情况</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>函数返回为空</td>
<td>C 中有各种函数都不返回值，或者您可以说它们返回空。不返回值的函数的返回类型为空</td>
</tr>
<tr>
<td>函数参数为空</td>
<td>C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void</td>
</tr>
<tr>
<td>指针指向void</td>
<td>类型为 void * 的指针代表对象的地址，而不是类型</td>
</tr>
</tbody>
</table>
<p>其余数据类型后面单独介绍</p>
<h2 id="五c变量">五、C变量</h2>
<p>变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型，类型决定了变量存储的大小和布局，该范围内的值都可以存储在内存中，运算符可应用于变量上。</p>
<p>变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的，因为 C 是大小写敏感的。</p>
<h3 id="c中的变量定义">C中的变量定义</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c">type varable_list;
</code></pre></div><p>变量定义就是告诉编译器在何处创建变量的存储，以及如何创建变量的存储。变量定义指定一个数据类型，并包含了该类型的一个或多个变量的列表。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c">type varable_name <span style="color:#f92672">=</span> value;
</code></pre></div><p>变量可以在声明的时候被初始化（指定一个初始值）。初始化器由一个等号，后跟一个常量表达式组成。</p>
<h3 id="c中的变量声明">C中的变量声明</h3>
<p>变量声明向编译器保证变量以指定的类型和名称存在，这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义，在程序连接时编译器需要实际的变量声明。</p>
<p>变量的声明有两种情况：</p>
<ol>
<li>一种是需要建立存储空间的。例如：int a 在声明的时候就已经建立了存储空间。</li>
<li>另一种是不需要建立存储空间的，通过使用extern关键字声明变量名而不定义它。 例如：extern int a 其中变量 a 可以在别的文件中定义的。</li>
</ol>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c"><span style="color:#66d9ef">extern</span> <span style="color:#66d9ef">int</span> i;<span style="color:#75715e">//声明，不是定义
</span><span style="color:#75715e"></span><span style="color:#66d9ef">int</span> i;<span style="color:#75715e">//声明，也是定义
</span></code></pre></div><h3 id="c中的左值和右值">C中的左值和右值</h3>
<ol>
<li>左值（lvalue）：指向内存位置的表达式被称为左值（lvalue）表达式。左值可以出现在赋值号的左边或右边。</li>
<li>右值（rvalue）：术语右值（rvalue）指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式，也就是说，右值可以出现在赋值号的右边，但不能出现在赋值号的左边。</li>
</ol>
<h2 id="六c常量">六、C常量</h2>
<p>常量是固定值，在程序执行期间不会改变。这些固定的值，又叫做字面量。<br>
常量可以是任何的基本数据类型，比如整数常量、浮点常量、字符常量，或字符串字面值，也有枚举常量。<br>
常量就像是常规的变量，只不过常量的值在定义后不能进行修改。</p>
<h3 id="整数常量">整数常量</h3>
<p>整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数：0x 或 0X 表示十六进制，0 表示八进制，不带前缀则默认表示十进制。<br>
整数常量也可以带一个后缀，后缀是 U 和 L 的组合，U 表示无符号整数（unsigned），L 表示长整数（long）。后缀可以是大写，也可以是小写，U 和 L 的顺序任意。</p>
<h3 id="浮点数常量">浮点数常量</h3>
<p>浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。<br>
当使用小数形式表示时，必须包含整数部分、小数部分，或同时包含两者。当使用指数形式表示时， 必须包含小数点、指数，或同时包含两者。带符号的指数是用 e 或 E 引入的。</p>
<h3 id="字符常量">字符常量</h3>
<p>字符常量是括在单引号中，例如，&lsquo;x&rsquo; 可以存储在 char 类型的简单变量中。<br>
字符常量可以是一个普通的字符（例如 &lsquo;x&rsquo;）、一个转义序列（例如 &lsquo;\t&rsquo;），或一个通用的字符（例如 &lsquo;\u02C0&rsquo;）。
在 C 中，有一些特定的字符，当它们前面有反斜杠时，它们就具有特殊的含义，被用来表示如换行符（\n）或制表符（\t）等。
|转义序列|含义|
|&mdash;-|&mdash;-|
|\\|\字符|
|\&lsquo;|'字符|
|\&ldquo;|&quot;字符|
|\?|?字符|
|\a|警报铃声|
|\b|退格键|
|\f|换页符|
|\n|换行符|
|\r|回车|
|\t|水平制表符|
|\v|垂直制表符|
|\ooo|一到三位八进制数|
|\xhh|一或多个数字的十六进制数|</p>
<h3 id="字符串常量">字符串常量</h3>
<p>字符串字面值或常量是括在双引号 &quot;&rdquo; 中的。一个字符串包含类似于字符常量的字符：普通的字符、转义序列和通用的字符。<br>
您可以使用空格做分隔符，把一个很长的字符串常量进行分行。</p>
<h3 id="定义变量">定义变量</h3>
<ul>
<li>使用#define 预处理器</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c"><span style="color:#75715e">#define identifier value
</span></code></pre></div><ul>
<li>const关键字</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-c" data-lang="c"><span style="color:#66d9ef">const</span> type variable <span style="color:#f92672">=</span> value;
</code></pre></div><p>一般将常量定义为大写字母格式。</p>
<h2 id="七-c存储类">七、 C存储类</h2>
<p>存储类定义 C 程序中变量/函数的范围（可见性）和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类：</p>
<ul>
<li>auto</li>
<li>register</li>
<li>static</li>
<li>extern</li>
</ul>
<h3 id="auto存储类">auto存储类</h3>
<p>auto存储类是所有局部变量默认的存储类，auto只能用在函数内，用于修饰局部变量。</p>
<h3 id="register存储类">register存储类</h3>
<p>register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小（通常是一个词），且不能对它应用一元的 &lsquo;&amp;&rsquo; 运算符（因为它没有内存位置）。<br>
寄存器只用于需要快速访问的变量，比如计数器。还应注意的是，定义 &lsquo;register&rsquo; 并不意味着变量将被存储在寄存器中，它意味着变量可能存储在寄存器中，这取决于硬件和实现的限制。</p>
<h3 id="static存储类">static存储类</h3>
<p>static 存储类指示编译器在程序的生命周期内保持局部变量的存在，而不需要在每次它进入和离开作用域时进行创建和销毁。因此，使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。<br>
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时，会使变量的作用域限制在声明它的文件内。<br>
全局声明的一个 static 变量或方法可以被任何函数或方法调用，只要这些方法出现在跟 static 变量或方法同一个文件中。</p>
<h3 id="extern存储类">extern存储类</h3>
<p>extern 存储类用于提供一个全局变量的引用，全局变量对所有的程序文件都是可见的。当您使用 extern 时，对于无法初始化的变量，会把变量名指向一个之前定义过的存储位置。<br>
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时，可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解，extern 是用来在另一个文件中声明一个全局变量或函数。<br>
extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候。</p>
<h2 id="八c运算符">八、C运算符</h2>
<h3 id="算术运算符">算术运算符</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>+</td>
<td>加法计算</td>
</tr>
<tr>
<td>-</td>
<td>减法计算</td>
</tr>
<tr>
<td>*</td>
<td>乘法计算</td>
</tr>
<tr>
<td>/</td>
<td>除法计算</td>
</tr>
<tr>
<td>%</td>
<td>取于计算</td>
</tr>
<tr>
<td>++</td>
<td>自增计算</td>
</tr>
<tr>
<td>&ndash;</td>
<td>自减计算</td>
</tr>
</tbody>
</table>
<h3 id="关系运算符">关系运算符</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>==</td>
<td>检查两数是否相等，如果相等返回真</td>
</tr>
<tr>
<td>！=</td>
<td>检查两数是否相等，如果不等返回真</td>
</tr>
<tr>
<td>&gt;</td>
<td>检查左操作数是否大于右操作数，如果是返回真</td>
</tr>
<tr>
<td>&lt;</td>
<td>检查左操作数是否小于右操作数，如果是返回真</td>
</tr>
<tr>
<td>&gt;=</td>
<td>检查左操作数是否大于等于右操作数，如果是返回真</td>
</tr>
<tr>
<td>&lt;=</td>
<td>检查左操作数是否小于等于右操作数，如果是返回真</td>
</tr>
</tbody>
</table>
<h3 id="逻辑运算符">逻辑运算符</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>&amp;&amp;</td>
<td>逻辑与：两个操作数都不是零返回真</td>
</tr>
<tr>
<td>||</td>
<td>逻辑或：两个操作数存在非零返回真</td>
</tr>
<tr>
<td>！</td>
<td>逻辑非：逆转操作数的逻辑状态</td>
</tr>
</tbody>
</table>
<h3 id="位运算符">位运算符</h3>
<table>
<thead>
<tr>
<th>p</th>
<th>q</th>
<th>p&amp;q</th>
<th>p|q</th>
<th>p^q</th>
<th>~p</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>&laquo; ：二进制左移运算符，将一个运算对象的各二进制位全部左移若干位（左边的二进制位丢弃，右边补0）。<br>
&gt;&gt;:二进制右移运算符，二进制右移运算符。将一个数的各二进制位全部右移若干位，正数左补0，负数左补1，右边丢弃。</p>
<h3 id="赋值运算符">赋值运算符</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
<th>实例</th>
</tr>
</thead>
<tbody>
<tr>
<td>=</td>
<td>简单的赋值运算符，把右边操作数的值赋给左边操作数</td>
<td>C = A + B 将把 A + B 的值赋给 C</td>
</tr>
<tr>
<td>+=</td>
<td>加且赋值运算符，把右边操作数加上左边操作数的结果赋值给左边操作数</td>
<td>C += A 相当于 C = C + A</td>
</tr>
<tr>
<td>-=</td>
<td>减且赋值运算符，把左边操作数减去右边操作数的结果赋值给左边操作数</td>
<td>C -= A 相当于 C = C - A</td>
</tr>
<tr>
<td>*=</td>
<td>乘且赋值运算符，把右边操作数乘以左边操作数的结果赋值给左边操作数</td>
<td>C *= A 相当于 C = C * A</td>
</tr>
<tr>
<td>/=</td>
<td>除且赋值运算符，把左边操作数除以右边操作数的结果赋值给左边操作数</td>
<td>C /= A 相当于 C = C / A</td>
</tr>
<tr>
<td>%=</td>
<td>求模且赋值运算符，求两个操作数的模赋值给左边操作数</td>
<td>C %= A 相当于 C = C % A</td>
</tr>
<tr>
<td>&laquo;=</td>
<td>左移且赋值运算符</td>
<td>C &laquo;= 2 等同于 C = C &laquo; 2</td>
</tr>
<tr>
<td>&gt;&gt;=</td>
<td>右移且赋值运算符</td>
<td>C &raquo;= 2 等同于 C = C &raquo; 2</td>
</tr>
<tr>
<td>&amp;=</td>
<td>按位与且赋值运算符</td>
<td>C &amp;= 2 等同于 C = C &amp; 2</td>
</tr>
<tr>
<td>^=</td>
<td>按位异或且赋值运算符</td>
<td>C ^= 2 等同于 C = C ^ 2</td>
</tr>
<tr>
<td>|=</td>
<td>按位或且赋值运算符</td>
<td>C |= 2 等同于 C = C | 2</td>
</tr>
</tbody>
</table>
<h3 id="其他运算符">其他运算符</h3>
<table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
<th>实例</th>
</tr>
</thead>
<tbody>
<tr>
<td>sizeof()</td>
<td>返回变量的大小。</td>
<td>sizeof(a) 将返回 4，其中 a 是整数。</td>
</tr>
<tr>
<td>&amp;</td>
<td>返回变量的地址。</td>
<td>&amp;a; 将给出变量的实际地址。</td>
</tr>
<tr>
<td>*</td>
<td>指向一个变量。</td>
<td>*a; 将指向一个变量。</td>
</tr>
<tr>
<td>? :</td>
<td>条件表达式</td>
<td>如果条件为真 ? 则值为 X : 否则值为 Y</td>
</tr>
</tbody>
</table>
<h3 id="c语言中运算符的优先级">C语言中运算符的优先级</h3>
<table>
<thead>
<tr>
<th>类别</th>
<th>运算符</th>
<th>结合性</th>
</tr>
</thead>
<tbody>
<tr>
<td>后缀</td>
<td>() [] -&gt; . ++ - -</td>
<td>从左到右</td>
</tr>
<tr>
<td>一元</td>
<td>+ - ! ~ ++ - - (type)* &amp; sizeof</td>
<td>从右到左</td>
</tr>
<tr>
<td>乘除</td>
<td>* / %</td>
<td>从左到右</td>
</tr>
<tr>
<td>加减</td>
<td>+ -</td>
<td>从左到右</td>
</tr>
<tr>
<td>移位</td>
<td>&laquo; &raquo;</td>
<td>从左到右</td>
</tr>
<tr>
<td>关系</td>
<td>&lt; &lt;= &gt; &gt;=</td>
<td>从左到右</td>
</tr>
<tr>
<td>相等</td>
<td>== !=</td>
<td>从左到右</td>
</tr>
<tr>
<td>位与 AND</td>
<td>&amp;</td>
<td>从左到右</td>
</tr>
<tr>
<td>位异或 XOR</td>
<td>^</td>
<td>从左到右</td>
</tr>
<tr>
<td>位或 OR</td>
<td>|</td>
<td>从左到右</td>
</tr>
<tr>
<td>逻辑与 AND</td>
<td>&amp;&amp;</td>
<td>从左到右</td>
</tr>
<tr>
<td>逻辑或 OR</td>
<td>|</td>
<td>从左到右</td>
</tr>
<tr>
<td>条件</td>
<td>?:</td>
<td>从右到左</td>
</tr>
<tr>
<td>赋值</td>
<td>= += -= *= /= %=&raquo;= &laquo;= &amp;= ^=</td>
<td>=</td>
</tr>
<tr>
<td>逗号</td>
<td>,</td>
<td>从左到右</td>
</tr>
</tbody>
</table>
<p>学习内容来自<a href="https://www.runoob.com/cprogramming/c-tutorial.html">菜鸟教程</a></p></article>
    </section>

    <footer class="ui attached segment dream-tags">
      
        
          <a class="ui label" href="/tags/c" title="C">C</a>
        
      
      <div
        class="ui label"
        style="float: right; background: #1b1c1d !important; cursor: pointer;"
        onclick="savePostAsImg()">
        <i class="save icon"></i> Save as image
      </div>
    </footer>

    

    

  </div>
  <div class="sixteen wide mobile sixteen wide tablet four wide computer column">
    <article class="dream-header">
  <section class="ui top attached center aligned segment">
    <div class="ui small circular image">
      
        <img src="/img/psb25.jpg">
      
    </div>

    <h3 class="ui header">zhitaoZ&#39;s blog<div class="sub header" style="margin-top: 0.5rem;">No one is a island</div>
    </h3>

    <div class="ui horizontal list">
      
      <a class="item" href="/tags">
        <i class="tags icon" title="All Tags"></i>
      </a>
      <a class="item" href="/categories">
        <i class="th list icon" title="All Categories"></i>
      </a>
    </div>
  </section>

  
  <section class="ui attached center aligned segment dream-tags">
    
      <a class="ui label" href="/tags/c" title="c">c</a>
    
      <a class="ui label" href="/tags/git" title="git">git</a>
    
      <a class="ui label" href="/tags/markdown" title="markdown">markdown</a>
    
      <a class="ui label" href="/tags/%E7%BD%91%E7%AB%99" title="网站">网站</a>
    
  </section>
  

  
  <section class="ui attached segment dream-categories">
    <div class="ui accordion">
      
        <div class="title">
          <i class="dropdown icon"></i>
          <a href="/categories/%E8%87%AA%E5%AD%A6" class="item">自学</a>
        </div>
        <div class="content">
          <div class="ui list">
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learnmd/" class="item">Markdown 基础语法</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learngit3/" class="item">Git 尝试pull request&amp; 接收pull request</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learngit2/" class="item">Git分支及远程相关操作</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learngit1/" class="item">Git基本操作</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learnc5/" class="item">C语言基础知识(五)</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learnc4/" class="item">C语言基础知识(四)</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learnc3/" class="item">C语言基础知识(三)</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learnc2/" class="item">C语言基础知识(二)</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/learnc1/" class="item">C语言基础知识(一)</a>
              </div>
            </div>
          
            <div class="item">
              <div class="content">
                <a href="https://zhitaoz.github.io/post/bblog/" class="item">hugo搭建博客步骤(windows)</a>
              </div>
            </div>
          
          </div>
        </div>
      
    </div>
  </section>
  

  <section class="ui bottom attached center aligned segment">
      
      <p>© 2020 zhitaoZ&#39;s blog</p>
      
      <p>Powered by <a href="https://gohugo.io/" target="_blank">Hugo</a> with theme <a href="https://github.com/g1eny0ung/hugo-theme-dream" target="_blank">Dream</a>.</p>
  </section>
</article>

  </div>
</div>

        </section>
        <section class="back">
          
<nav class="ui secondary inverted menu dream-menu">

  <div class="item">
    <i class="large link bullseye icon dream-flip-toggle" title="Flip it!"></i>
  </div>
  <div class="item">
    <i class="large link home icon" title="Home" onclick="window.location.href = 'https:\/\/zhitaoz.github.io\/'"></i>
  </div>
  <div class="item">
    <i id="theme-switch" class="large link icon" onclick="themeSwitch()"></i>
  </div>
</nav>

          <div class="ui centered relaxed grid dream-grid dream-back">
  

  <section class="sixteen wide mobile eight wide tablet four wide computer column dream-column">
    <article>
      <div class="ui top attached segment">
        <h3 class="ui header">Social Links</h3>
      </div>
      <div class="ui attached segment">
        <nav class="ui secondary menu dream-menu">
          
            <div class="item">
              <a href="mailto:zhangzhitao@bupt.edu.cn">
                <i class="large mail icon" title="email"></i>
              </a>
            </div>
          

          
            <div class="item">
              <a href="https://github.com/zhitaoZ" target="_blank">
                <i class="large github icon" title="github"></i>
              </a>
            </div>
          

          

          

          
        </nav>
      </div>
    </article>
  </section>

  <section class="sixteen wide mobile eight wide tablet four wide computer column dream-column">
    
  </section>

  
  

</div>

        </section>
      </div>
    </div>

    <script src="/js/jquery.min.js"></script>
<script src="/js/semantic.min.js"></script>
<script src="/js/imagesloaded.pkgd.min.js"></script>
<script src="/js/masonry.pkgd.min.js"></script>
<script src="/js/nav.js"></script>
<script src="/js/header.js"></script>
<script src="/js/main.js"></script>
<script src="/js/theme.js"></script>
<script src="/js/html2canvas.min.js"></script>



  </body>
</html>
